import pyttsx3

from base_api.constant import FileName


class Pyttsx3Task:
    def __init__(self):
        # 创建语音合成对象
        self.engine = pyttsx3.init()

        # 音量
        self.volume = 1.0
        # 频率
        self.rate = 200
        # 声音id
        self.voice_id = ''
        # 所有声音引擎
        self.voice_list = list()
        self.init_voice_list()

        # 待合成的文本
        self.text = ''
        # 待合成文本的输出文件
        self.filename = ''

        # 任务标志，分别表示是否外放和是否写入文件
        self.play_flag = False
        self.write_flag = False

    def init_voice_list(self):
        # 获取本地所有语言合成引擎
        self.voice_list = self.engine.getProperty('voices')

    def exploit(self):
        self.engine.save_to_file(self.text, 'data/test/temp1/' + self.filename)
        self.engine.runAndWait()

    def check(self):
        # 元素0表示检查结果，bool类型，False表示异常。元素1表示异常的字符串描述
        result = [True, '']
        # 当需要写入文件时，检查文件名
        if self.write_flag:
            if self.filename == '':
                result = [False, '文件名不能为空']
                return result
            else:
                for i in range(len(FileName.filename_exclude_chString)):
                    if FileName.filename_exclude_chString[i] in self.filename:
                        result = [False, '文件名中不能包括敏感字符%s' % FileName.filename_exclude_chString]
                        return result
        # 检查待合成文本不为空
        if self.text == '':
            result = [False, '待合成文本内容不能为空字符串']
        return result
